home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1998 #4
/
Amiga Plus CD - 1998 - No. 4.iso
/
pd
/
tools
/
wbstars2.0
/
source
/
wbstars_cx.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-16
|
3KB
|
137 lines
/* $VER: WBStars_CX.c 2.0b4 (29 May 1997)
*/
#include <libraries/commodities.h>
#include <libraries/dos.h>
#include <proto/exec.h>
#include <proto/commodities.h>
#include <clib/alib_protos.h>
#include "WBStars_include.h"
#include "WBStars_protos.h"
#define EVT_HOTKEY 1L
struct MsgPort *broker_mp;
CxObj *broker, *filter, *sender, *translate;
struct NewBroker newbroker = {
NB_VERSION,
"WBStars",
"WBStars 2.0b5 by Alexander Pokahr",
"The Workbench Animator",
NBU_UNIQUE | NBU_NOTIFY,
0, 0, 0, 0
};
ULONG cxsigflag;
char InitCx()
{
CxMsg *msg;
if( broker_mp=CreateMsgPort() )
{
newbroker.nb_Port = broker_mp;
cxsigflag = 1L << broker_mp->mp_SigBit;
newbroker.nb_Pri = CXpri;
if( broker=CxBroker(&newbroker,NULL) )
{
if( filter=CxFilter(hotkey) )
{
AttachCxObj(broker, filter);
if( sender=CxSender(broker_mp,EVT_HOTKEY) )
{
AttachCxObj(filter, sender);
if( translate=(CxTranslate(NULL)) )
{
AttachCxObj(filter, translate);
if( !CxObjError(filter) )
{
if( Activate() ) ActivateCxObj(broker, 1L);
else ActivateCxObj(broker, 0L);
return TRUE;
}
}
}
}
DeleteCxObjAll(broker);
while( msg=(CxMsg *)GetMsg(broker_mp) )
ReplyMsg((struct Message *)msg);
}
DeletePort(broker_mp);
}
return FALSE;
}
void RemovCx()
{
CxMsg *msg;
DeleteCxObjAll(broker);
while( msg=(CxMsg *)GetMsg(broker_mp) )
ReplyMsg((struct Message *)msg);
DeletePort(broker_mp);
}
char HandleCx()
{
extern struct MsgPort *broker_mp;
extern CxObj *broker;
extern ULONG cxsigflag;
CxMsg *msg;
ULONG msgid, msgtype;
while(msg = (CxMsg *)GetMsg(broker_mp))
{
msgid = CxMsgID(msg);
msgtype = CxMsgType(msg);
ReplyMsg((struct Message *)msg);
switch(msgtype)
{
case CXM_IEVENT:
switch(msgid)
{
case EVT_HOTKEY:
if( activated )
{
Inactivate();
}
else
{
Activate();
}
break;
}
break;
case CXM_COMMAND:
switch(msgid)
{
case CXCMD_DISABLE:
ActivateCxObj(broker, 0L);
Inactivate();
break;
case CXCMD_ENABLE:
if( Activate() ) ActivateCxObj(broker, 1L);
break;
case CXCMD_KILL:
return FALSE;
break;
case CXCMD_UNIQUE:
return FALSE;
break;
case CXCMD_APPEAR:
break;
case CXCMD_DISAPPEAR:
break;
}
break;
}
}
if( SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C )return FALSE;
return TRUE;
}